# 字符串的分割
# '正则表达式re，string的split()只能进行简单的分割，re.split()可以进行多个字符的分割'
# import re
#
# line = 'asdf fjdk; afed, fjek,asdf, foo'
# # ret = [x for x in re.split(r'[;,\s]\s*', line) if x]
# ret = re.split(r'[;,\s]\s*', line)
# values = ret[::2]
# delimiters = ret[1::2] + ['']
# print(values)
# print(delimiters)
import re

# 字符串的匹配
# srt.startswith() and str.endswith()用来判断开头或结尾
# 使用切片也能和re.match()，但是不够优雅
# import os
#
# filenames = ['foo.txt', 'bar.py', 'baz.py', 'qux.doc']
# var = [name for name in filenames if name.endswith(('.py', '.txt'))]

# 字符串搜索
# fnmatch()和fnmatchcase()函数用于判断是不是匹配，case注重大小写
# str.find(),str.endswith(),str.startswith()匹配字面字符
# 对于复杂匹配，使用re.match(),如果需要返回所有匹配项，使用re.findall()，使用()可以进行组捕获

# 字符串替换
# import re
#
# text1 = 'yeah, but no, but yeah, but no, but yeah'
# text1.replace('yeah', 'yep')
# text2 = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
# re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text2)
# datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
# datepat.sub(r'\3-\1-\2', text2)
# re.sub(r'(?P<month>\d+)/(?P<day>\d+)/(?P<year>\d+)', r'\g<year>-\g<month>-\g<day>', text2)
# 困难在于如何编写合适的正则表达式模式 使用re.IGNORECACER忽略大小写匹配
# import re

# 最小匹配 .*表示任意字符 加?表示最小匹配
# str_pat = re.compile(r'"(.*)"')
# text = 'Computer says "no 23"'
# ret = str_pat.findall(text)
# print(ret)

# 多行匹配 (?:.|\n)中的?:表示非匹配组 .默认不匹配换行符，添加\n表示匹配换行符，可以进行多行直接的匹配


# 同一字符串可能有不同的表示方式，在这种情况下，需先使用normalize()将Unicode文本标准化

# 使用strip()用于删除开头或者结尾的空白字符，lstrip()用于删除开头的空白字符，rstrip()用于删除结尾的空白字符
# 也可以通过strip(=)来删除指定字符，但无法对中间的字符进行修改
# translate()对文本进行替换，通常使用replace就够了】
# 字符串对齐，format() 比使用 ljust() , rjust() 或 center()通用
# 向字符串中插入变量，通常使用format()

# 字符串令牌解析
# import re
#
# NAME = r'(?P<NAME>[a-zA-Z_][a-zA-Z_0-9]*)'
# NUM = r'(?P<NUM>\d+)'
# PLUS = r'(?P<PLUS>\+)'
# TIMES = r'(?P<TIMES>\*)'
# EQ = r'(?P<EQ>=)'
# WS = r'(?P<WS>\s+)'
#
# master_pat = re.compile('|'.join([NAME, NUM, PLUS, TIMES, EQ, WS]))
# print(master_pat)
# from collections import namedtuple
#
#
# def generate_tokens(pat, text):
#     Token = namedtuple('Token', ['type', 'value'])
#     scanner = pat.scanner(text)
#     for m in iter(scanner.match, None):
#         yield Token(m.lastgroup, m.group())
# 更多细节无法穷举，随实际问题进行解决
